<?php
namespace Swiftx\Processor;
use Swiftx\System\Object;

/**
 * 处理器接口
 * @author		胡永强  <odaytudio@gmailcom>
 * @since		2015-05-08
 * @copyright	Copyright (c) 2014-2015 Swiftx Inc.
 */
abstract class Adapter extends Object implements IBase {

    protected $forward = null;

    /**
     * 完整性检查
     * @return bool
     */
    abstract public function ActionCheckout();

    /**
     * 执行处理器方法
     * @return mixed
     */
    abstract public function ActionExecute();


    /**
     * 执行完成后处理方法
     * @param mixed $result
     */
    public function Forward($result){
        if(is_callable($result))
            $this->forward = $result;
        if($this->forward == null) return;
        call_user_func($this->forward, $result);
    }

    /**
     * 同步执行处理器
     * @return bool
     */
    public function SyncExecute(){
        $this->ActionCheckout();
        return $this->ActionExecute();
    }

    /**
     * 队列执行处理器
     * @param callback $forward
     */
    public function QueueExecute($forward = null){
        // todo 委托给队列执行
    }

    /**
     * 异步执行理器
     * @param callback $foo
     */
    public function WorkerExecute($foo = null){
        // todo 分发给异步处理程序
    }

    public static function Test($case){

    }

}